/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package kernel;

import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;

/**
 *
 * @author corentinjezequel
 */
class Mitarbeit {
     int ID;
     String name;
     String vorname;
     String firmeneintritt;
     String beschaftigungsende;
     String benutzername;
     String password;
     String aktiv;
     String privilegien;

    public Mitarbeit(int NID,String N,String VN,String FE,String Besc, String Ben,String Pass,String akt, String Pri){
       ID=NID; name=N;vorname=VN;firmeneintritt=FE;beschaftigungsende=Besc;benutzername=Ben;password=Pass;aktiv=akt;privilegien=Pri;
    }
}

public class Employee {
    public static String updateEmployee(String ID,String id,String name, String vorname,String firmeneintritt,String Beschaftigungsende,String BenutzerName,String Passwort,String Active,String Privilegien) throws ParseException{
        
        String masklayout = "dd.MM.yyyy";
        String maskdb = "yyyy-MM-dd";
        SimpleDateFormat formatter = new SimpleDateFormat(maskdb);
        SimpleDateFormat formatterDisplay = new SimpleDateFormat(masklayout);
        Date auxDate = new Date();
        
        
        Connection conn = null; //initialisation de la connexion
        try {
           conn=kernel.ConnectDB.ConnectDB();

            CallableStatement stmt = conn.prepareCall("call UPDATE_EMPLOYEE(?,?,?,?,?,?,?,?,?,?,?,?)");
            //  set the in param
            stmt.setString(1,ID);
            stmt.setString(2,id);
            stmt.setString(3, name.replace("'","''"));
            stmt.setString(4, vorname.replace("'","''"));
            auxDate = formatterDisplay.parse(firmeneintritt);
            stmt.setString(5, formatter.format(auxDate).replace("'","''"));
            auxDate = formatterDisplay.parse(Beschaftigungsende);
            stmt.setString(6, formatter.format(auxDate).replace("'","''"));
            stmt.setString(7, BenutzerName.replace("'","''"));
            stmt.setString(8, Passwort.replace("'","''"));
            stmt.setString(9, Active.replace("'","''"));
            stmt.setString(10, Privilegien.replace("'","''"));
            System.out.println(stmt);

            //set the out param
            int Integer=0;
          stmt.registerOutParameter(11, 12);


           ResultSet rs = stmt.executeQuery();
           String result=stmt.getString(11);

            int error=stmt.getInt(12);

            System.out.println("Vous etes déconnecté mon general");
            if(error==1){return ("1");}
            return(result);


        } catch (SQLException e) {
            e.printStackTrace();
            return(null);
       }

}

public static String newEmployee(String ID,String name, String vorname,String firmeneintritt,String Beschaftigungsende,String BenutzerName,String Passwort,String Active,String Privilegien) throws ParseException{
        Connection conn = null; //initialisation de la connexion
        String masklayout = "yyyy-MM-dd";
        String maskdb = "dd.MM.yyyy";
        SimpleDateFormat formatter = new SimpleDateFormat(maskdb);
        SimpleDateFormat formatterDisplay = new SimpleDateFormat(masklayout);
        Date auxDate = new Date();
        try {
           conn=kernel.ConnectDB.ConnectDB();

            CallableStatement stmt = conn.prepareCall("call CREATE_EMPLOYEE(?,?,?,?,?,?,?,?,?,?,?)");
            //  set the in param
            stmt.setString(1,ID);
            stmt.setString(2, name.replace("'","''"));
            stmt.setString(3, vorname.replace("'","''"));
                        auxDate = formatter.parse(firmeneintritt);
            stmt.setString(4,formatterDisplay.format(auxDate));
            auxDate = formatter.parse(Beschaftigungsende);
            stmt.setString(5,formatterDisplay.format(auxDate));
            stmt.setString(6, BenutzerName.replace("'","''"));
            stmt.setString(7, Passwort.replace("'","''"));
            stmt.setString(8, Active.replace("'","''"));
            stmt.setString(9, Privilegien.replace("'","''"));
            System.out.println(stmt);

            //set the out param
            int Integer=0;
          stmt.registerOutParameter(10, 11);


           ResultSet rs = stmt.executeQuery();
           String result=stmt.getString(10);

            int error=stmt.getInt(11);
           
            System.out.println("Vous etes déconnecté mon general");
            if(error==1){return ("1");}
            if(error==2){return("2");}
            return(result);


        } catch (SQLException e) {
            e.printStackTrace();
            return(null);
       }

}

public static String[][] searchemployee(String arg1, int arg2,String arg3) throws ParseException{
        Connection conn = null; //initialisation de la connexion

        String masklayout = "dd.MM.yyyy";
        String maskdb = "yyyy-MM-dd";
        SimpleDateFormat formatter = new SimpleDateFormat(maskdb);
        SimpleDateFormat formatterDisplay = new SimpleDateFormat(masklayout);
        Date auxDate = new Date();        
        
        ArrayList <Mitarbeit> employe;
        String Miarbeits[][] = null;
        try {
            conn=kernel.ConnectDB.ConnectDB();

            //CallableStatement stmt = conn.prepareCall("call SEARCH_CUSTOMER()");
            //  set the in param

            CallableStatement stmt;
            stmt=conn.prepareCall("call SEARCH_EMPLOYEE_ID(?,?,?)");

            stmt.setString(1,arg1);
            stmt.setInt(2, arg2);
            stmt.setString(3, arg3);
            ResultSet rs = stmt.executeQuery();
            //set the out param
            int Integer=0;

int i=0;
            employe = new ArrayList <Mitarbeit>();
            while (rs.next( )){
                employe.add(new Mitarbeit(rs.getInt("mitarbeiterid"),rs.getString("name"),rs.getString("vorname"),rs.getDate("firmeneintritt").toString(),rs.getDate("beschaeftigungsende").toString(),rs.getString("benutzername"),rs.getString("password"),rs.getString("aktiv"),rs.getString("privilegien")));
                i++;
            }
            //puis dans un tableau
            int nbLignes = i;
            Miarbeits = new String [nbLignes][12];
            for(i=0;i<nbLignes;i++){
                String privi = "";
                Mitarbeit b = employe.get(i);
                Miarbeits[i][0]=String.valueOf(b.ID);
                Miarbeits[i][1]=b.name;
                Miarbeits[i][2]=b.vorname;
                auxDate = formatter.parse(b.firmeneintritt);
                Miarbeits[i][3]=formatterDisplay.format(auxDate);
                auxDate = formatter.parse(b.beschaftigungsende);
                Miarbeits[i][4]=formatterDisplay.format(auxDate);
                Miarbeits[i][5]=b.benutzername;
                Miarbeits[i][6]=b.password;
                Miarbeits[i][7]=Employee.numberToStatus((int) Float.parseFloat(b.aktiv));
                if(b.privilegien.contains("CanEditCarData")) privi=privi+" C";
                if(b.privilegien.contains("CanManageUsers")) privi=privi+" M";
                if(b.privilegien.contains("CanSeeStatistics")) privi=privi+" S";
                if(b.privilegien.contains("CanSeeHistories")) privi=privi+" H";
                Miarbeits[i][8]=privi;

            }
            System.out.println("Vous etes déconnecté mon general");

            return(Miarbeits);


        } catch (SQLException e) {
            e.printStackTrace();
            return(null);
       }
    
}

public static String numberToStatus(int number){
    String anrede = new String();
    if(number==1) anrede="Ja";
    else anrede="Nein";
    return anrede;
}

}
